// 从 @/common/apis/coupon 模块导入 couponList 和 receiveCoupon 函数
import {
  couponList,
  takeCoupon,
  notTakeCouponList,
} from "@/common/apis/coupon";

/**
 * 优惠券模块的 Vuex 存储配置
 * @module couponStore
 */
export default {
  /**
   * 定义存储的状态
   * @returns {Object} 包含优惠券列表的状态对象
   */
  state() {
    return {
      // 存储优惠券列表的数组
      list: [],
    };
  },

  /**
   * 定义存储的 getters
   */
  getters: {},

  /**
   * 定义存储的 mutations
   */
  mutations: {},

  /**
   * 定义存储的 actions
   */
  actions: {
    /**
     * 异步获取优惠券列表
     * @returns {Promise<Object>} 返回一个 Promise，包含 API 响应或错误信息
     */
    async fetchCouponList({ state }) {
      try {
        // 调用 couponList 函数并等待响应
        const response = await couponList();
        if (response.records.length) {
          state.list = response.records;
        }
        // 直接返回响应，因为 async 函数本身就返回 Promise
        return response;
      } catch (err) {
        // 抛出错误，让调用者处理
        throw err;
      }
    },
    /**
     * @description 获取未领取优惠券
     * @param {Object} context - Vuex 上下文对象
     * @param {Object} payload - 传递给 API 的参数
     * @returns {Promise<Object>} - 返回一个 Promise，包含 API 响应或错误信息
     *
     */
    async fetchNotTakeCouponList({}, payload) {
      try {
        // 调用 notTakeCouponList 函数并传递参数，等待响应
        const response = await notTakeCouponList(payload);
        // 直接返回响应，因为 async 函数本身就返回 Promise
        return response;
      } catch (err) {
        // 抛出错误，让调用者处理
        throw err;
      }
    },
    /**
     * 异步获取领取优惠券的结果
     * @param {Object} context - Vuex 上下文对象
     * @param {Object} payload - 传递给 API 的参数
     * @returns {Promise<Object>} - 返回一个 Promise，包含 API 响应或错误信息
     */
    async fetchTakeCoupon({}, payload) {
      try {
        // 调用 receiveCoupon 函数并传递参数，等待响应
        const response = await takeCoupon(payload);
        // 直接返回响应，因为 async 函数本身就返回 Promise
        return response;
      } catch (err) {
        // 抛出错误，让调用者处理
        throw err;
      }
    },
  },
};
